package com.zac.coroutine.algorithm.leetcode.linkedlist

/**
 * author zac
 * date 2025/7/31
 *
 * 160. 相交链表
 * 简单
 * 相关标签
 * premium lock icon
 * 相关企业
 * 给你两个单链表的头节点 headA 和 headB ，请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点，返回 null 。
 *
 * 图示两个链表在节点 c1 开始相交：
 */
object IntersectionNode {


    @JvmStatic
    fun main(args: Array<String>) {

    }

    /**
     * 首先要明确一个概念
     * 两个节点相交,并不只是值相等,而是对象是同一个对象.
     *
     * 这题的解法的核心思想在于,
     * A单独的长度 + A与B的相交链表的长度 + B单独的长度 == B单独的长度 + A与B的相交链表的长度 + A单独的长度
     */
    fun getIntersectionNode(headA: ListNode?, headB: ListNode?): ListNode? {

        var A = headA
        var B = headB
        while (A != B) {
            A = if (A == null) {
                headB
            } else {
                A.next
            }


            B = if (B == null) {
                headA
            } else {
                B.next
            }
        }
        return A

    }

    class ListNode(var `val`: Int) {
        var next: ListNode? = null
    }
}